<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        let car = {
            name:'奔驰',
            out:'14'
        }
        function setcar(){
            let obj = {}
            obj.name = name,
            obj.out = out
            //出厂
            return obj
        }
        
        // let bc = setcar('奔驰','14')
        // let bmw= setcar('宝马','v8')

        // console.log(bc);
        // console.log(bmw);

        //最大化解决大量重复的问题，和普通函数封装没有区别
        //问题：创建不同的对象时属性方法会重复建立，消耗内存

        // 定义构造函数   构造函数首字母大写  在构造函数中不需要写return
        function Setcart(name,out) {
            //构造函数会自动创建一个空的对象
            this.name=name
            this.out=out
            this.fn = function(){
                console.log('fn');
                
            }
            this.start = function(params){
                console.log(this.name+'已启动');
                
            }
            //返回添加好的对象
        }
        Setcart.prototype.opens = function(){
            console.log('open'+this.name);
            
        }
        // 使用构造函数   使用构造函数的时候需要用new关键词触发   常说的new一个对象
        let bc = new Setcart('奔驰','14')
        let bmw= new Setcart('宝马','v8')
        
        console.log(bc);
        console.log(bmw);
        bc.fn()
        bc.start()
        bmw.start()
        //调用原型上的方法
        bc.opens()
        bmw.opens()
    </script>
</body>
</html>